import reactivify from "./reactivify"

// 第一步：使用一个临时的函数名存储函数
export const array_methods = Object.create(Array.prototype)
arrayMethodsReactivify()
function arrayMethodsReactivify () {
    // 函数的拦截：在函数原有的基础上增加额外的操作
    // 1. 使用一个临时的函数名存储函数
    // 2. 重新定义原来的函数
    // 3. 定义扩展的功能
    // 4. 调用临时的那个函数

    // 扩展数组的push和pop方法
    //     - 直接修改prototype-不行
    //     - 修改进行响应式化的数组对象的原型(__proto__)
    const arrayNeedsChange = [
        'push',
        'pop',
        'unshift',
        'shift',
        'sort',
        'reverse',
        'splice'
    ]
    arrayNeedsChange.forEach(method => {
        console.log(method)
        // 第二步：重新定义数组的push、pop...方法
        array_methods[method] = function () {
            // 第三步：定义扩展的功能
            console.log('调用的是拦截的 '+ method +' 方法')
            for (let i = 0; i < arguments.length; i++) {
                reactivify(arguments[i])
            }
            // 第四步：保持原有功能
            let res = Array.prototype[method].apply(this, arguments)
            return res
        }
    })
}